package cn.bonoon.kernel.web.handlers;

import cn.bonoon.handler.impl.StandardAutoManager;
import cn.bonoon.kernel.support.services.GenericService;
import cn.bonoon.kernel.web.controllers.GridButtonResolver;
import cn.bonoon.kernel.web.controllers.GridToolbarResolver;

/**
 * <pre>
 * 对各种处理器进行注册
 * </pre>
 * @author jackson
 *
 */
public interface HandlerRegister {
	
//	/**
//	 * <pre>
//	 * 整个控制器唯一的ID
//	 * </pre>
//	 * @return
//	 */
//	String getId();
	
	/**
	 * <pre>
	 * toolbar上的按钮，默认是ajax请求
	 * 
	 * 在toolbar上的按钮一般不能通过状态来控制它的允许操作或不允许操作，因为是允许多选的。
	 * 在toolbar栏上定义一个弹出对话框的按钮
	 * <hr/>
	 * 默认的按键如下：
	 * 1.新建{@link cn.bonoon.kernel.web.handlers.DialogInsertHandler#toolbar(HandlerRegister, GenericService, Class) DialogInsertHandler.toolbar(HandlerRegister, GenericService, Class)}
	 * </pre>
	 * 
	 * @param key 操作key
	 * @param name 按钮上显示的名称
	 * @param url 该按钮响应的处理事件或url
	 * @param isDialog
	 * @return
	 */
	GridToolbarResolver toolbar();

	/**
	 * <pre>
	 * 在列表的按钮上弹出对话框
	 * 默认是ajax的提交请求，操作完成时并刷新当前的grid列表
	 * 
	 * 按钮的默认定义包括：
	 * 1.名称
	 * 2.href(自动生成)
	 * 3.javascript处理事件
	 * 4.控制器处理事件
	 * </pre>
	 * @param parameter
	 * @param eventType
	 * @return
	 */
	GridButtonResolver button();
	
	/**
	 * 详情请查看{@link BuilderInitializer}
	 * @return
	 */
	StandardAutoManager getManager();
	
//	FormSetting getSetting();
	
//	LayoutGridBuilder getGridBuilder();
	/**
	 * <pre>
	 * 事件处理结束后，如何刷新该事件所在的父容器；
	 * 如：datagrid上的添加操作、在添加完成后刷新父容器，也就是datagrid列表
	 * 
	 * 详细查看：{@link cn.bonoon.kernel.web.html.grid.StandardGridBuilder#getGridReload() GridBuilder.getGridReload()}
	 * </pre>
	 * @return
	 */
	String refreshParentComponenet();
	
//	int getDialogHeight();
}
